草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 对象成员的迭代器 "pointing"

我承认我很难对此做出合理的描述。我想不出一个好词来准确描述我正在寻找的东西。也许这可以称为切片迭代器。假设我有这样的东西:structS{inti;char*s;floatf;};std::vectorv(10);我正在寻找一种构造迭代器的方法,它将指向S的成员。我希望能够将它传递给std::min_element之类的东西,而无需在每种情况下都创建谓词。可能看起来像这样的东西:std::min_element(slicing_iterator(v.begin(),S::f),slicing_iterator(v.end(),S::f));我可以使用任何模板技巧来实现这一目标吗?或者它

c++ - 为什么迭代 std::set 比迭代 std::vector 慢得多?

在优化性能关键代码时,我注意到迭代std::set有点慢。然后我编写了一个基准测试程序,并测试了迭代器(autoit:vector)对vector的迭代速度,迭代器对集合的迭代速度,以及索引(inti=0;i)对vector的迭代速度。容器的构造相同,有1024个随机整数。(当然,每个int都是唯一的,因为我们使用的是集合)。然后,对于每次运行,我们循环遍历容器并将它们的整数相加为一个长整型。每次运行有1000次迭代求和,测试是1000次运行的平均值。这是我的结果:Testingvectorbyiterator✓Maximumduration:0.012418Minimumdurati

c++ - 关于 vector 、指针和迭代器的问题

同学们,我明天期中考试,我正在看样卷,我对这道题没有把握。任何帮助将不胜感激。让v成为vector,这样每个元素v[i]包含指向Thingie的指针.如果p是vector::iterator,回答以下问题:什么类型是p?什么类型是*p?什么代码提供了实际地址Thingie?什么代码提供了实际的Thingie? 最佳答案 whattypeisp?p类型为vector::iterator,无论碰巧是什么类型。whattypeis*p?*p是Thingie*&;也就是说,它是对vector中迭代器指向的元素的引用。whatcodeprov

c++ - 为什么函数的递归版本比 C 中的迭代版本更快?

我正在检查梯度下降的两种实现方式之间的区别,我的猜测是在编译器优化之后,两个版本的算法将是等效的。令我惊讶的是,递归版本明显更快。我没有丢弃任何版本的实际缺陷,甚至没有丢弃我测量时间的方式。你们能给我一些见解吗?这是我的代码:#include#include#include#include#includedoublef(doublex){return2*x;}doubledescgrad(doublexo,doublexnew,doubleeps,doubleprecision){//printf("step...x:%fXp:%f,delta:%f\n",xo,xnew,fabs(x

c++ - 替换给定迭代器的 std::list 对象

给定一个std::list的迭代器,如何替换迭代器引用位置的对象?目前我能想到的就是用新对象和迭代器调用insert(在迭代器引用的元素之前插入新对象),然后调用erase删除要替换的对象。有没有更迂回的方式来完成替换? 最佳答案 有什么问题:(*it)=obj;obj是替换值? 关于c++-替换给定迭代器的std::list对象,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6

c++ - 如何在不使用任何迭代器的情况下获取 Qt 中 QList 的最小值和最大值?

有没有办法在不使用任何迭代器的情况下在Qt中获取QList的最小值和最大值?这是使用迭代器的代码:QList::iteratormin=std::min_element(listVal.begin(),listVal.end());QList::iteratormax=std::max_element(listVal.begin(),listVal.end()); 最佳答案 如果您不想将迭代器作为结果而是直接将值作为结果,您可以直接引用结果://assert(!listVal.empty());doublemin=*std::min

c++ - 如何在增量循环中构造 std::list 迭代器

我正在尝试对std::list进行双循环以对每对元素进行操作。但是,我在初始化第二个迭代器时遇到了一些问题。我想写的代码是:for(std::list::iteratori=l.begin();i!=l.end();++i){for(std::list::iteratorj=i+1;j!=l.end();++j){...}}这行不通,因为列表迭代器不是随机访问的,所以您不能+1。但是我在寻找一个简洁的替代品时遇到了一些麻烦;编译器似乎对std::list::iteratorj(i)++;不太满意我对此抱有希望。实现我想要的似乎我将不得不有一些笨拙的额外增量,这不适合for循环的结构。有

c++ - 为什么我们不能有 move 的迭代器?

C++11引入了一种“move”算法,它的行为类似于“复制”算法,除了它......move数据而不是复制数据。我想知道为什么委员会没有更新复制算法以使用forward代替(或者可能除此之外)。vector提供了T&的迭代器constvector提供constT&的迭代器vector&&不能提供T&&的迭代器是有原因的吗?这将允许通过使用vector的构造函数将元素从列表move到vector...这是个坏主意吗? 最佳答案 我们已经有了。使用std::make_move_iterator创建move迭代器。

c++ - STL 映射迭代器可以通过递增越界吗?

对于关联容器,++运算符能否将迭代器发送到集合末尾之后?例子:mapnew_map;new_map[0]=0;new_map[1]=1;mapnew_iter=new_map.begin();++new_iter;++new_iter;++new_iter;++new_iter;++new_iter;++new_iter;++new_iter;到此结束,是new_iter==new_map.end(),还是落入未知数?注意:我知道这是一团糟,而不是做事的方式。我正在处理一些WTF公司代码。 最佳答案 如果递增结束迭代器,结果是未定义

c++ - 寻找迭代线性求解器的测试矩阵/系统

我目前正在开发一个基于C++的库来解决大型、稀疏的线性代数问题(是的,我知道存在很多这样的库,但我自己动手主要是为了学习迭代求解器、稀疏存储容器等。.).我已经到了在我的其他编程项目中使用我的求解器的地步,并且想针对不属于我自己的问题测试求解器。首先,我希望针对正定的对称稀疏系统进行测试。我已经找到了此类系统矩阵的多个来源,例如:MatrixMarketUFSparseMatrixCollection话虽这么说,但我还没有找到包含整个系统-系统矩阵和RHS的良好测试矩阵的任何来源。为了检查结果,这将是很棒的。关于我在哪里可以找到这样完整的系统的任何提示,或者我可以做些什么来为我可以在线